In computer systems, a transaction is typically an activity starting at a first point in time and ending at a second point in time. The activity may include one or more accesses to the memory including read accesses and write accesses.
In typical scenarios where several users initiate transactions simultaneously on a same set of data, a portion of the data changed by one of the users may affect other users. A typical solution to this problem is to allow only one transaction at a time on the set of data while blocking all other transactions initiated on the data until a current transaction is terminated. This may lead to long queues of transactions waiting for their turn to access the data. In a typical software development scenario, where several groups of users have to work on the same set of data, this solution proves very inefficient as the long waiting times to access the data may lead to considerably long development cycles. Current systems usually address the above indicated problems by generating a deep copy for each user initiating a transaction on the data. The deep copy is generally an exact copy of the set of data for which a transaction is initiated. The users typically work with the deep copies issued to them and all the deep copies are generally put together in a validation cycle. As each of the users work with a separate copy of the data, none of the users are aware of the changes carried out to the data by other users. This may lead to inconsistency of data during the validation cycle which may further elongate the development cycle. In addition, if an error occurs during a transaction the data is left in an inconsistent state and there is no way to retrieve the original data as it existed before the transaction was initiated.
In addition, current systems also use the deep copy when read only accesses must be given to one or more users. As the user works with a copy of the data instead of the original data, it ensures the safety of the original data. Thus changes to the data made by the user are actually made to the deep copy of the data. The deep copy is typically destroyed on the termination of a read only transaction.
As the deep copy is an exact copy of the original data, it occupies the same amount of space as the original data itself. In addition, generating each deep copy consumes an amount of system time. Thus generating a number of deep copies for various users consumes a lot of system resources and affects overall performance of the system.